package com.photoeditor.demo.ui.dialog;

import android.content.Context;

import com.photoeditor.demo.model.preference.SPDataManager;
import com.photoeditor.demo.model.preference.SpConstant;
import com.photoeditor.demo.model.preference.SpUtils;
import com.photoeditor.demo.model.subscribe.manager.AppVipManager;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DialogShow {

    /**
     * 幸运用户弹窗
     * <p>
     * 方法里包含了判断条件,外部不用额外去判断
     *
     * @param entrance 需要区分从哪个入口进来,参数参见 LuckyUserDialogEntrance
     * @param context  为了获取FragmentManager
     * @param type     主要为了分区不同页面进来(用作统计)
     * @param listener 评分引导是否符合条件展示的回调
     */
//    public static void showLuckyUserDialog(InspireDialogEntrance entrance, Context context, int type, IDialog.Listener listener) {
//        //增加首次在xxx页面关闭的条件
//        //由于幸运用户和激励视频弹窗在服务器的配置是互斥的,所以可以共用SP的值
//        boolean extra = false;
//        switch (entrance) {
//            case ENTRANCE_1:
//                //和激励视频需求不同,幸运用户弹窗只有首次才展示
//                extra = SPDataManager.isFirstCloseSubsPage();
//                break;
//            case ENTRANCE_2:
//                //和激励视频需求不同,幸运用户弹窗只有首次才展示
//                extra = SPDataManager.isFirstCloseSubsPage();
//                break;
//            case ENTRANCE_3:
//                //和激励视频需求不同,幸运用户弹窗只有首次才展示
//                extra = SPDataManager.isFirstCloseSubsPage();
//                break;
//            default:
//                break;
//        }
//        if (!extra) {
//            return;
//        }
//        //修改sp的值
//        switch (entrance) {
//            case ENTRANCE_1:
//                SPDataManager.closeFeatureSubsPage();
//                break;
//            case ENTRANCE_2:
//                SPDataManager.closeToolSubsPage();
//                break;
//            case ENTRANCE_3:
//                SPDataManager.closeMaterialSubsPage();
//                break;
//            default:
//                break;
//        }
//        WDialog.create(HighRatingObtainVipDialog.class)
//                .with(context)
//                //没有评分过
//                .and(!SPDataManager.hasRated())
//                //没有展示过这个弹窗(只展示一次)
//                .and(SPDataManager.getIsShowObtainVipDialog())
//                //非自然用户(买量用户)
//                .and(UserHelper.getInstance().isBuyUser())
//                .paras("type", type)
//                .show(listener);
//    }

    public enum InspireDialogEntrance {
        /**
         * 高级功能订阅页
         */
        ENTRANCE_1,
        /**
         * vip工具订阅页
         */
        ENTRANCE_2,
        /**
         * 有vip素材订阅蒙板的编辑页
         */
        ENTRANCE_3,
        /**
         * 高级功能页
         */
        ENTRANCE_4
    }

    /**
     * 激励视频弹窗
     * <p>
     * 方法里包含了判断条件,外部不用额外去判断
     *
     * @param entrance @param entrance 需要区分从哪个入口进来,参数参见 InspireDialogEntrance
     * @param context  为了获取FragmentManager
     * @param retain   干啥用的
     * @param type     主要为了分区不同页面进来(用作统计)
     * @param listener 评分引导是否符合条件展示的回调
     */
    public static void showAdVideoDialog(InspireDialogEntrance entrance, Context context, String retain, int type, IDialog.Listener listener, IDialog.IListener sListener) {
        //增加首次在xxx页面关闭的条件
        //由于幸运用户和激励视频弹窗在服务器的配置是互斥的,所以可以共用SP的值
        boolean extra = false;
        //次数控制交由策略控制，这里只判断当前是否展示过弹窗
        switch (entrance) {
            case ENTRANCE_1:
                //高级功能
                extra = /*SPDataManager.isFirstCloseSubsPage() &&*/ !SPDataManager.whetherShowedAdVideoDialogInAdvanceResultPage();
                break;
            case ENTRANCE_2:
                //vip工具订阅页关闭时,每次都弹
                extra = true;
                break;
            case ENTRANCE_3:
                //有vip素材订阅蒙板的编辑页关闭时,
                extra = !SPDataManager.whetherShowedAdVideoDialogInAdvanceResultPage()/*SPDataManager.isFirstCloseSubsPage()*/;
                break;
            case ENTRANCE_4:
                //在高级功能页面首次点击关闭按钮
                extra = /*SPDataManager.isFirstCloseSubsPage() &&*/ !SPDataManager.whetherShowedAdVideoDialogInAdvanceResultPage();
                break;
            default:
                break;
        }
        if (!extra) {
            if (listener != null) {
                listener.no();
            }
            return;
        }
        //修改sp的值
        switch (entrance) {
            case ENTRANCE_1:
                SPDataManager.closeFeatureSubsPage();
                break;
            case ENTRANCE_2:
                SPDataManager.closeToolSubsPage();
                break;
            case ENTRANCE_3:
                SPDataManager.closeMaterialSubsPage();
                break;
            default:
                break;
        }
        WDialog.create(WatchAdvanceObtainResultDialog.class)
                .with(context)
                .and(!AppVipManager.isVip())
                .paras("retain", retain)
                .paras("type", type)
                .listen(sListener)
                .show(listener);
    }


    public enum RateGuideEntrance {
        /**
         * 用户首次进入应用(新用户),使用过任意2次热门功能后
         * (使用过表示进入到结果页;如果是付费功能,需要订阅成功后才算进入结果页)
         * 在第二次功能结果页点击任意按钮(包括物理返回键)时展示引导
         */
        ENTRANCE_1,
        /**
         * 用户点击保存图片时,保存成功后弹出评分引导
         */
        ENTRANCE_2
    }

    /**
     * 评分引导弹窗
     *
     * @param entrance
     * @param context
     * @param action
     * @param rateChageListener
     * @param listener          评分引导是否符合条件展示的回调
     */
    public static void showRateGuideDialog(RateGuideEntrance entrance,
                                           Context context, String action,
                                           RateGuide.OnRateChageListener rateChageListener,
                                           IDialog.Listener listener,
                                           IDialog.IListener sListener,
                                           int where) {
        switch (entrance) {
            case ENTRANCE_1:
                WDialog.create(RateGuide.class)
                        .with(context)
                        //没有评分过
                        .and(!SPDataManager.hasRated())
                        //今天没有评分过
                        .and(!SPDataManager.getTodayHasRated())
                        //首次进入应用
//                        .and(SPDataManager.isFirstStart())
                        //使用过两次热门功能后
                        .and(SPDataManager.getComeToResultPageCount() == 2)
                        .paras("action", action)
                        .paras("listener", rateChageListener)
                        .listen(sListener)
                        .show(listener);
                break;
            case ENTRANCE_2:
                if (SpUtils.obtain().getBoolean("appFromBackground", false)) {//第二次进入应用
                    String date = SpUtils.obtain().getString("appFromBackgroundDate", "");
                    if (!date.equals(new SimpleDateFormat("yyyy-MM-dd").format(new Date()))) {  //是否同一天
                        SpUtils.obtain().save("appFromBackground", false);
                    }
                }

                WDialog.create(RateGuide.class)
                        .with(context)
                        //没有评分过
                        .and(!SPDataManager.hasRated())
                        //今天没有评分过
                        .and(!SPDataManager.getTodayHasRated())
                        //新用户(启动次数为1)第二次点击编辑页的保存按钮 或 非新用户第一次点击保存
//                        .and((SpUtils.obtain().getInt("startup_count", 0) <= 1
//                                && SpUtils.obtain().getInt("edit_save", 0) >= 2)
//                                || SpUtils.obtain().getInt("startup_count", 0) > 1)
                        //是否使用编辑工具或模特图
                        .and(SpUtils.obtain().getBoolean(SpConstant.IS_NEED_TO_SAVE, false))
                        .paras("action", action)
                        .paras("listener", rateChageListener)
                        .paras("where", where)
                        .listen(sListener)
                        .show(listener);
                if (SpUtils.obtain().getBoolean("appFromBackground", false)) {
                    SpUtils.obtain().save("appFromBackground", false);
                }
                break;
            default:
                break;
        }

    }
}
